/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tk.eigh.ksvg.component.filter;

import ksvg.core.SVGFilter;
import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFComponent;
import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFProperty;

/**
 * <p>This filter primitive performs a Gaussian blur on the input image.</p>
 * <p>The Gaussian blur kernel is an approximation of the normalized
 * convolution:</p> <p>G(x,y) = H(x)I(y)</p> <p>where</p> <p>H(x) =
 * exp(-x<sup>2</sup>/ (2s<sup>2</sup>)) / sqrt(2* pi*s<sup>2</sup>)</p>
 * <p>and</p> <p>I(y) = exp(-y<sup>2</sup>/ (2t<sup>2</sup>)) / sqrt(2*
 * pi*t<sup>2</sup>)</p> <p>with 's' being the standard deviation in the x
 * direction and 't' being the standard deviation in the y direction, as
 * specified by <a
 * href="http://www.w3.org/TR/SVG/filters.html#feGaussianBlurStdDeviationAttribute">‘stdDeviation’</a>.</p>
 * <p>The value of <a
 * href="http://www.w3.org/TR/SVG/filters.html#feGaussianBlurStdDeviationAttribute">‘stdDeviation’</a>
 * can be either one or two numbers. If two numbers are provided, the first
 * number represents a standard deviation value along the x-axis of the current
 * coordinate system and the second value represents a standard deviation in Y.
 * If one number is provided, then that value is used for both X and Y.</p>
 * <p>Even if only one value is provided for <a
 * href="http://www.w3.org/TR/SVG/filters.html#feGaussianBlurStdDeviationAttribute">‘stdDeviation’</a>,
 * this can be implemented as a separable convolution.</p> <p>For larger values
 * of 's' (s &gt;= 2.0), an approximation can be used: Three successive
 * box-blurs build a piece-wise quadratic convolution kernel, which approximates
 * the Gaussian kernel to within roughly 3%.</p> <p>let d = floor(s *
 * 3*sqrt(2*pi)/4 + 0.5)</p> <p>... if d is odd, use three box-blurs of size
 * 'd', centered on the output pixel.</p> <p>... if d is even, two box-blurs of
 * size 'd' (the first one centered on the pixel boundary between the output
 * pixel and the one to the left, the second one centered on the pixel boundary
 * between the output pixel and the one to the right) and one box blur of size
 * 'd+1' centered on the output pixel.</p> <p>Note: the approximation formula
 * also applies correspondingly to 't'.</p> <p>Frequently this operation will
 * take place on alpha-only images, such as that produced by the built-in input,
 * <a href="http://www.w3.org/TR/SVG/filters.html#SourceAlpha">SourceAlpha</a>.
 * The implementation may notice this and optimize the single channel case. If
 * the input has infinite extent and is constant (e.g <a
 * href="http://www.w3.org/TR/SVG/#FillPaint">FillPaint</a> where the fill is a
 * solid color), this operation has no effect. If the input has infinite extent
 * and the filter result is the input to an <a
 * href="http://www.w3.org/TR/SVG/filters.html#feTileElement">‘feTile’</a>, the
 * filter is evaluated with periodic boundary conditions.</p>
 *
 */
@JSFComponent(name = "svg:GaussianBlur",
type = "tk.eigh.svg.GaussianBlur",
family = "filter.GaussianBlur",
clazz = "ksvg.filter.GaussianBlur",
tagClass = "ksvg.tags.filter.GaussianBlurTag",
defaultRendererType = "filter.SVGGaussianBlurRenderer")
public abstract class AbstractGaussianBlur extends SVGFilter {

    /**
     * <dl><dt>stdDeviation = "<em><a
     * href="types.html#DataTypeNumberOptionalNumber">&lt;number-optional-number&gt;</a></em>"</dt><dd>The
     * standard deviation for the blur operation. If two <a
     * href="http://www.w3.org/TR/SVG/types.html#DataTypeNumber">&lt;number&gt;</a>s
     * are provided, the first number represents a standard deviation value
     * along the x-axis of the coordinate system established by attribute <a
     * href="http://www.w3.org/TR/SVG/filters.html#FilterElementPrimitiveUnitsAttribute">‘primitiveUnits’</a>
     * on the <a
     * href="http://www.w3.org/TR/SVG/filters.html#FilterElement">‘filter’</a>
     * element. The second value represents a standard deviation in Y. If one
     * number is provided, then that value is used for both X and Y.<br/> A
     * negative value is an error. A value of zero disables the effect of the
     * given filter primitive (i.e., the result is the filter input image). If
     * <a
     * href="http://www.w3.org/TR/SVG/filters.html#feGaussianBlurStdDeviationAttribute">‘stdDeviation’</a>
     * is 0 in only one of X or Y, then the effect is that the blur is only
     * applied in the direction that has a non-zero value. <br/> If the
     * attribute is not specified, then the effect is as if a value of 0 were
     * specified.<br/> <a
     * href="http://www.w3.org/TR/SVG/animate.html#Animatable">Animatable</a>:
     * yes.</dd></dl>
     */
    @JSFProperty
    public abstract String getStdDeviation();
}